package com.stars.module.role.controller;

import com.stars.base.entity.CommonDTO;
import com.stars.base.entity.Result;
import com.stars.module.role.entity.StarRole;
import com.stars.module.role.service.StarRoleService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/11/25 14:54
 * @description : 角色控制器
 */
@RestController
@RequestMapping("/starRole")
public class StarRoleController {

    private final StarRoleService roleService;

    public StarRoleController(StarRoleService roleService) {
        this.roleService = roleService;
    }

    /**
     * 查询角色树
     * @author : Rocks
     * @date :  2023/2/26 20:51
     * @return Result
     */
    @RequestMapping("/loadTree")
    public Result loadTree(){
        return Result.success(roleService.loadTree());
    }

    /**
     * 根据查询条件加载角色列表
     * @author : Rocks
     * @date :  2023/2/26 20:52
     * @param dto 查询条件
     * @return Result
     */
    @RequestMapping("/loadRoleListByFid")
    public Result loadRoleListByFid(@RequestBody CommonDTO dto) {
        return Result.success(roleService.loadRoleListByFid(dto));
    }

    /**
     * 根据角色ID查询角色基本信息
     * @author : Rocks
     * @date :  2023/2/26 20:53
     * @param id 要查询的角色ID
     * @return Result
     */
    @RequestMapping("/loadRoleById")
    public Result loadRoleById(String id) {
        return Result.success(roleService.loadRoleById(id));
    }

    /**
     * 校验当前角色变更角色类型是否可操作
     * @author : Rocks
     * @date :  2023/6/30 17:29
     * @param role 角色信息
     * @return Result
     */
    @RequestMapping("/check")
    public Result checkRoleTypeChange (@RequestBody  StarRole role) {
        return roleService.checkRoleTypeChange(role.getId(),role.getDirectory());
    }

    /**
     * 保存或更新角色对象
     * @author : Rocks
     * @date :  2023/2/26 20:54
     * @param role 角色对象
     * @return Result
     */
    @RequestMapping("/save")
    public Result saveOrUpdateRole(@RequestBody  StarRole role){
        return Result.result(roleService.saveOrUpdateRole(role));
    }

    /**
     * 删除角色
     * @author : Rocks
     * @date :  2023/2/26 20:54
     * @param id 要删除角色的ID
     * @return Result
     */
    @RequestMapping("/removeRole")
    public Result removeRole(String id){
        return roleService.removeRole(id);
    }

    /**
     * 获取指定父级下最大排序
     * @author : Rocks
     * @date :  2023/2/26 20:55
     * @param fid 父级ID
     * @return Result
     */
    @RequestMapping("/getMaxIndex")
    public Result getMaxIndex(String fid) {
        return Result.success(roleService.getMaxIndex(fid));
    }

}
